
package com.wine.exam.domain;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.*;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.wine.common.annotation.Excel;
import com.wine.common.core.domain.BaseEntity;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import java.io.Serializable;
import java.util.Date;

/**
 * 学科对象 exam_subject
 *
 * @author wine
 * @date 2022-09-04
 */
@Getter
@Setter
@EqualsAndHashCode
@ToString
@AllArgsConstructor
@NoArgsConstructor
@TableName("exam_subject")
// 暂不用baseEntity
public class Subject implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 学科主键  TODO 自动递增，这个还好
     */
    @JsonSerialize(using = ToStringSerializer.class)
    @TableId(value = "subject_id", type = IdType.AUTO)
    private Long subjectId;

    /**
     * 学科名称语文 数学 英语 等
     */
    @TableField(value = "subject_name")
    @Excel(name = "学科名称")
    @NotBlank(message = "学科名称不能为空")
    @Length(min = 1, max = 20, message = "学科名称长度不能超过20个字符")
    private String subjectName;

    /**
     * 学科排序
     */
    @TableField(value = "order_num")
    @Excel(name = "学科排序")
    private Long orderNum;

    /**
     * 年级 (1-12) 小学 初中 高中 大学
     */
//    废弃字段
  /*  @TableField(value = "level")
    @Excel(name = "年级 (1-12)")
    @Pattern(regexp = "[1,2,3,4,5,6,7,8,9,10,11,12]", message = "年级可选项目1-12")
    private String level;*/

    /**
     * 学科状态（0正常 1停用）
     */
    @TableField(value = "status")
    @Excel(name = "学科状态", readConverterExp = "0=正常,1=停用")
//    简单测试了下，rang其实也可以
    @Pattern(regexp = "[0,1]", message = "问题状态:0=正常,1=停用")
    private String status;

    /**
     * 删除标志（0代表存在 2代表删除）
     * TODO ： 明明配置了不查出来，但是还能查出来
     */
    @TableLogic
    @TableField(select = false)
    private String delFlag;

    /**
     * 创建人
     */

    @TableField(value = "create_by")
    private String createBy;

    /**
     * 创建时间
     */

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private Date createTime;


    /**
     * 更新人
     */

    @TableField(value = "update_by")
    private String updateBy;

    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
}
